﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using BlueFinity.mvNET.CoreObjects;
using mvLibrary;
using mvLibrary.Helpers.BaseClass;
using mvLibrary.Helpers.Utils;
using IBMU2.UODOTNET;

namespace fenk.Stock.Desarmes
{
    public partial class AltaDesarmes : BaseForm
    {
        private const string PRODUCTO_FILENAME = "PRODUCTOS";
        private const int PRODUCTOS_INDEX = 6;
        private const int CANTIDAD_INDEX = 7;
        private const int STOCK_DESARME_INDEX = 39;
        private const int CANCELADO_INDEX = 14;
        private bool previousCancelState;
        public AltaDesarmes()
        {
            InitializeComponent();
        }

        public override void AfterReadItem()
        {
            gpbBajaReserva.Visible = ItemStatus.Equals(Status.Update);
            previousCancelState = FenkUtils.GetBoolFromYesNoString(UniItem.ExtractAsString(CANCELADO_INDEX));
            this.panelData.Enabled = !previousCancelState;
        }

        public override void AfterSaveItem()
        {
                bool isCancelOperation = !previousCancelState.Equals(chkCancelarReserva.Checked);
                
                var idProductos = UniItem.Extract(PRODUCTOS_INDEX);

                int position = 1;

                for (int index = 0; index <= idProductos.Dcount(); index++)
                {
                    var idProducto = idProductos.ExtractAsString(index+1,position);

                    int cantidadProductoAnterior =
                        UniOldItem.ExtractAsInt(CANTIDAD_INDEX, position);

                    int cantidadProductoActual = !isCancelOperation ?
                        UniItem.ExtractAsInt(CANTIDAD_INDEX, position) : FenkUtils.ZERO;

                    UniDynArray producto = programCaller.ReadRecord(UniAccount, idProducto, PRODUCTO_FILENAME);
                    int stockDesarme = producto.ExtractAsInt(STOCK_DESARME_INDEX);
                    int stockFinal = stockDesarme - cantidadProductoAnterior + cantidadProductoActual;

                    producto.Replace(STOCK_DESARME_INDEX, stockFinal.ToString());
                    string productoString = producto.ToString();

                    programCaller.SaveItem(UniAccount, productoString, idProducto, PRODUCTO_FILENAME, User);
                    position++;
                }

            
        }

    }
}
